package com.bigdata.core.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * collect 回收算子，会将结果回收到 Driver端，如果结果比较大，就不要回收，这样的话会造成Driver端的OOM
 */
object Demo3_collect {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("foreach").setMaster("local")
    val sc = new SparkContext(conf)
    sc.setLogLevel("error")

    val lines: RDD[String] = sc.textFile("data/words")

    // 数据不移动，移动的是计算，把逻辑代码移动到存储数据的节点，collect就是把分布到其他节点处理的数据
    // 进行回收，回收到Driver端，Driver就是一个JVM进程，只能运行在一台主机上
    // 如果回收文件非常大，那么加载到一台机器中会OOM内存溢出，只可以回收少量的数据
    val result: Array[String] = lines.collect()

    result.foreach(println)
  }
}

